(function($) {

	$.SJR = function(){};

	$.SJR.SIMPLE_JSON_REST = "1.0.0"

	$.SJR.option = {
		"type" : "",
		"url"  : "",
		"data" : null,
		"success" : null,
		"error"   : null
	};

	$.SJR.clear = function(){
		$.SJR.option.data = {};
		$.SJR.option.success = function(response, status){console.log('ajax success');};
		$.SJR.option.error = function(xhr, status, thrown){console.log('ajax error');};
	};
	$.SJR.clear();

	$.SJR.ajax = function(option) {
		if(option)
			$.SJR.option = option;
		$.ajax($.SJR.option);
	};

	$.SJR.ajaxbase = function(type, config, success, error){
		$.SJR.clear();
		if(type)
			$.SJR.option.type = type;
		if(config)
			if($.isPlainObject(config)){
				if(config.url){
					$.SJR.option.url = config.url;
				}
				if(config.data){
					$.SJR.option.data = config.data;
				}
			}else{
				if($(config).get(0).tagName=='FORM'){
					$.SJR.option.url = $(config).attr('action');
					$.SJR.option.data = $(config).values();
				}
			}
		if(success)
			$.SJR.option.success = success;
		if(error)
			$.SJR.option.error = error;
		$.ajax($.SJR.option);
	};

	$.SJR.ajaxfnbase = function(obj, type, config, success, error){
		var _success = function(response, status){
			$.SJR.thisObject.success(response, status);
		};
		var _error = function(xhr, status, thrown){
			$.SJR.thisObject.error(xhr, status, thrown);
		};
		$.SJR.clear();
		$.SJR.thisObject = obj;
		if(type)
			$.SJR.option.type = type;
		if(config)
			if($.isPlainObject(config)){
				if(config.url){
					$.SJR.option.url = config.url;
				}
				if(config.data){
					$.SJR.option.data = config.data;
				}
			}else{
				if($(config).get(0).tagName=='FORM'){
					$.SJR.option.url = $(config).attr('action');
					$.SJR.option.data = $(config).values();
				}
			}
		if(success){
			obj.success = success;
			$.SJR.option.success = _success;
		}
		if(error){
			obj.error = error;
			$.SJR.option.error = _error;
		}
		$.ajax($.SJR.option);
	};

	$.extend({
		_GET : function(config, success, error) {
			$.SJR.ajaxbase("GET", config, success, error);
		},
		_POST : function(config, success, error) {
			$.SJR.ajaxbase("POST", config, success, error);
		},
		_PUT : function(config, success, error) {
			$.SJR.ajaxbase("PUT", config, success, error);
		},
		_DELETE : function(config, success, error) {
			$.SJR.ajaxbase("DELETE", config, success, error);
		}
	});

	$.fn.extend({
		_GET : function(config, success, error) {
			$.SJR.ajaxfnbase(this, "GET", config, success, error);
			return this;
		},
		_POST : function(config, success, error) {
			$.SJR.ajaxfnbase(this, "POST", config, success, error);
			return this;
		},
		_PUT : function(config, success, error) {
			$.SJR.ajaxfnbase(this, "PUT", config, success, error);
			return this;
		},
		_DELETE : function(config, success, error) {
			$.SJR.ajaxfnbase(this, "DELETE", config, success, error);
			return this;
		}
	});

})(jQuery);

